#ifndef BASEEDITOR_H
#define BASEEDITOR_H

#include <Qsci/qsciscintilla.h>
#include <Qsci/qscilexer.h>
#include <Qsci/qsciapis.h>
#include <QCompleter>
#include <QString>
#include <QStringList>
#include "EditorTypes.h"

class BaseEditor : public QsciScintilla
{
    Q_OBJECT

public:
    explicit BaseEditor(QWidget *parent = nullptr);
    virtual ~BaseEditor();

    virtual void setupLanguage() = 0;    // 配置特定语言环境
    virtual void setupCodeCompletion() = 0;    // 配置代码补全
    virtual QStringList getKeywords() const = 0;    // 获取语言关键字
    virtual LanguageType getLanguageType() const = 0;   // 获取语言类型

    // 通用功能接口
    QString getAllText() const;
    void setAllText(const QString &text);
    void enableSyntaxHighlighting(bool enable);
    void enableCodeFolding(bool enable);
    void enableAutoIndentation(bool enable);
    void enableBraceMatching(bool enable);
    void enableLineNumbers(bool enable);
    void enableCurrentLineHighlighting(bool enable);

    // 代码补全相关
    void enableAutoCompletion(bool enable);
    void setAutoCompletionThreshold(int threshold);

    // 语法检查相关
    virtual void checkSyntax();
    void clearSyntaxErrors();

    // 获取当前行列信息
    int getCurrentLine() const;
    int getCurrentColumn() const;
    QString getCurrentLineText() const;

protected:
    void setupCommonSettings();
    void setupIndentation();
    void setupMargins();
    void setupColors();

    QsciLexer *m_lexer;
    QsciAPIs *m_apis;
    bool m_syntaxHighlightingEnabled;
    bool m_autoCompletionEnabled;
    int m_autoCompletionThreshold;     // 自动完成触发字符数阈值

private slots:
    void onTextChanged();
    void onCursorPositionChanged(int line, int index);

signals:
    void textContentChanged();
    void cursorPositionChanged(int line, int column);
    void syntaxErrorDetected(int line, const QString &message);
};

#endif // BASEEDITOR_H
